package com.chushouya.product.service.admin;

import com.general.framework.core.schema.PageResult;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemCombineDTO;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemValueDetailDTO;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemValueListDTO;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemValueQuery;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemValueSaveDTO;
import com.chushouya.product.dto.admin.evaluateitem.EvaluateItemValueUpdateDTO;

import java.util.List;

/**
 * 估价项目选项业务
 */
public interface EvaluateItemValueService {

    /**
     * 分页查询估价项目选项
     * @param query 参数
     * @return 分页对象
     */
    PageResult<EvaluateItemValueListDTO> selectEvaluateItemValuePageResult(EvaluateItemValueQuery query);

    /**
     * 查询估价项目选项列表
     * @param query 参数
     * @return 列表
     */
    List<EvaluateItemValueListDTO> selectEvaluateItemValueList(EvaluateItemValueQuery query);

    /**
     * 根据ID查询估价项目选项
     * @param evaluateValueId 估价项目选项ID
     * @return 估价项目选项详情
     */
    EvaluateItemValueDetailDTO getEvaluateItemValueDetail(Long evaluateValueId);

    /**
     * 新增估价项目选项
     * @param evaluateItemValue 估价项目选项
     * @return ID
     */
    Long addEvaluateItemValue(EvaluateItemValueSaveDTO evaluateItemValue);

    /**
     * 修改估价项目选项
     * @param evaluateItemValue 估价项目选项
     * @return ID
     */
    Long editEvaluateItemValue(EvaluateItemValueUpdateDTO evaluateItemValue);

    /**
     * 删除估价项目选项
     * @param evaluateValueId 估价项目选项ID
     */
    void removeEvaluateItemValue(Long evaluateValueId);

    /**
     * 修改估价项目选项状态
     * @param evaluateValueId 估价项目选项ID
     * @param status 状态
     * @return ID
     */
    Long editEvaluateItemValueStatus(Long evaluateValueId, Integer status);

    /**
     * 根据估价项目ID查询选项列表
     * @param evaluateItemId 估价项目ID
     * @return 列表
     */
    List<EvaluateItemValueListDTO> selectEvaluateItemValueListByEvaluateItemId(Long evaluateItemId);

    /**
     * 查询估价项目和项目选项组合信息列表
     * @param categoryId 分类ID
     * @return 估价项目和项目选项组合信息列表
     */
    List<EvaluateItemCombineDTO> selectEvaluateItemCombineList(Long categoryId);
}
